﻿using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using BussinessLogicTecnoPez.Seguridad_Tecnopez;
using BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques;
using BussinessLogicTecnoPez.Tipos_Comunes;
using System.Collections;
using System.Text;

/// <summary>
/// Contiene un conjunto de funciones a nivel global
/// </summary>
/// 
namespace Tecnopez.Globals
{
    public delegate void personalizarGestor(object Manager);

    public enum PageMode
    {
        ListMode,
        NewMode,
        EditMode,
        ViewMode,
        ModeNotFound,
        DeleteMode
    }
    public class Functions
    {

        public static string getScriptForOpenPopUpModalWindow(string page, string name, int width, int height)
        {
            string result;
            result = "if (window.showModalDialog) {";
            result += "window.showModalDialog(\"" + page + "\",\"" + name + "\",";
            result += "\"dialogWidth:" + width.ToString() + "px;dialogHeight:" + height.ToString() + "px\");";
            result += "} else {";
            result += "window.open('" + page + "','" + name + "',";
            result += "'height=" + height.ToString() + ",width=" + width.ToString() + ",toolbar=no,directories=no,status=no,";
            result += "menubar=no,scrollbars=yes,resizable=no ,modal=yes'); }";
            result += " return false;";


            return result;
        }

        public static void MessageBox(string mensaje, Page pagina)
        {

            pagina.ClientScript.RegisterStartupScript(pagina.GetType(), "MensajeBox" + pagina.GetType().Name, @"<script type=""text/javascript""> alert('" + mensaje + "');</script>");
        }

        public static string getScriptDeLockButtons(Page p, Button b)
        {
            return GetLockButtonJscript(p, b, "Procesando..", new ArrayList(), "");
        }

        /// <summary>

        /// Generates auto-disable butotn
        /// </summary>

        /// <param name="p">Page Instance</param>
        /// <param name="btn">Button Instance</param>

        /// <param name="disabledText">Text to display on button when clicked</param>
        /// <param name="aCol">Optional: Collection of controls on page to disable as well (buttons only for now)</param>

        /// <param name="customScript">Optional: Custom script to run before disabling the button</param>

        /// <returns></returns>
        public static string GetLockButtonJscript(Page p, Button btn, string disabledText, ArrayList aCol, string customScript)
        {
            disabledText = disabledText == "" ? "Processing..." : disabledText; disabledText = disabledText.Replace("'", "");



            StringBuilder sb = new StringBuilder();
            if (btn.CausesValidation && p.Validators.Count > 0 && btn != null)
            {
                sb.Append("if (typeof(Page_ClientValidate) == 'function') { "); sb.Append("if (Page_ClientValidate('" + btn.ValidationGroup + "') == false) { return false; }} ");

            }
            if (!String.IsNullOrEmpty(customScript))
            {

                sb.Append(customScript);

            }
            PostBackOptions opt = new PostBackOptions(btn, "", "", false, true, true, true, true, btn.ValidationGroup);

            sb.Append(p.ClientScript.GetPostBackEventReference(opt));
            sb.Append(";");

            sb.Append("this.disabled='true';this.value='" + disabledText + "';");
            foreach (Control c in aCol)
            {
                if (c is Button)
                {
                    sb.Append("" + c.UniqueID + ".disabled='true';");

                }

            }
            return sb.ToString();



        }



        public static void setearReadOnly(bool valor, params System.Web.UI.WebControls.TextBox[] muchosTextos)
        {
            foreach (TextBox var in muchosTextos)
            {
                var.ReadOnly = valor;
            }
        }
        public static void limpiarTextBoxes(params System.Web.UI.WebControls.TextBox[] muchosTextos)
        {
            foreach (TextBox var in muchosTextos)
            {
                var.Text = "";
            }
        }
        /// <summary>
        /// Registra la información del error en la base de datos
        /// </summary>
        /// <param name="EXP"></param>
        public static void LogError(Exception EXP)
        {
            //ACA HAGO EL INSERT DEL LOG
            //Esto lo va a hacer David
        }

        /// <summary>
        /// Devuelve el valor de configuracion de aplicacion del
        /// webconfig.
        /// </summary>
        /// <param name="clave">clave a buscar</param>
        /// <returns>valor de la clave en web.config</returns>
        public static string getConfiguration(string clave)
        {
            return System.Configuration.ConfigurationManager.AppSettings[clave];
        }

        /// <summary>
        /// Retorna la nombre del host, el puerto y el nombre de la aplicación
        /// </summary>
        /// <param name="page">Pagina de la que se va a extraer la información</param>
        /// <returns>nombre del host, el puerto y el nombre de la aplicación</returns>
        public static string getHost(System.Web.UI.Page page)
        {
            string host;
            if (!string.IsNullOrEmpty(page.Request.Url.Port.ToString()))
            {
                host = string.Format("{0}:{1}", page.Request.Url.Host, page.Request.Url.Port);
            }
            else
            {
                host = page.Request.Url.Host;
            }
            host = string.Format("http://{0}/{1}/", host, getConfiguration("ApplicationFolder"));
            return host;
        }

        public static bool SendMail(string to, string subject, string message, string nombre)
        {
            try
            {
                System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();

                //Creamos una credencia con user y password, en ese orden
                System.Net.NetworkCredential cred = new System.Net.NetworkCredential("dverme@arnet.com.ar", "");
                mail.To.Add(to);
                mail.Subject = subject;

                //Este mail es el que aparecera para mostrar
                mail.From = new System.Net.Mail.MailAddress("dverme@arnet.com.ar", nombre);
                mail.IsBodyHtml = true; // Aceptamos HTML
                mail.Body = message;
                System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.arnet.com.ar"); //seleccionamos nuetsro servidor smtp
                //smtp.UseDefaultCredentials = false;
                //smtp.EnableSsl = true;
                //smtp.Credentials = cred; //asignamos la credencial
                smtp.Send(mail); // enviamos
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

        /// <summary>
        /// Devuelve el objeto empleado correspondiente al usuario logueado
        /// </summary>
        /// <param name="page">System.Web.Ui.Page de donde se obtendrá el usuario logueado</param>
        /// <returns>BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques.Empleado</returns>
        public static Empleado getEmpleadoLogueado(System.Web.UI.Page page)
        {
            string user = page.User.Identity.Name;
            if (page.Session["empleadoLogueado" + user] == null)
            {
                Usuario objUser;
                Usuario.getManager.ClearFilters();
                Usuario.getManager.AddFilter("NOMBRE", BussinessLogicTecnoPez.GenericManager<Usuario>.filterOperator.Equals, user);
                objUser = Usuario.getManager.GetOne();

                if (objUser != null)
                {
                    page.Session["empleadoLogueado" + user] = objUser;
                    return objUser.Empleado;
                }
                else
                {
                    return null;
                }
            }
            else
            {
                return (page.Session["empleadoLogueado" + user] as Usuario).Empleado;
            }
        }

        /// <summary>
        /// Retorna el objeto TipoMoneda que esta definida como patron
        /// </summary>
        /// <returns>BussinessLogicTecnoPez.Tipos_Comunes.TipoMoneda</returns>
        public static TipoMoneda getMonedaDefault()
        {
            TipoMoneda.getManager.ClearFilters();
            TipoMoneda.getManager.AddFilter("ESPATRON", BussinessLogicTecnoPez.GenericManager<TipoMoneda>.filterOperator.Equals, "1");
            return TipoMoneda.getManager.GetOne();
        }

        public static string getPhysicalPathTecnopezWEB(Page p)
        {

            return p.Server.MapPath("/" + getConfiguration("ApplicationFolder"));
        }
    }
}
